/********************************************************************************************************************************
 * 《C ++ Primer》第五版中文版，读书笔记：按照书中的的示例源码和每一个小章节的课后习题，自己动手写代码实现，作为联系和测试。
 * Date: 2024-04-01 09:20
 * Author: dimon.chen 
 * EMali: 1181302388@qq.com 
 * 
 * 章节: 第三章 字符串，向量和数组
 *       3.3.3 vector对象的其它操作
 * 
 ********************************************************************************************************************************/

#include <iostream>
#include <string>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;

int main(int argc, char *argv[])
{

    //列表初始化，使用花括号，vecotr对象v中存放元素的类型为int
    vector<int> v{1,2,3,4,5,6,7,8,9};

    //范围for语句
    for(auto &i : v)    //对于vector对象中的每一个元素，i是引用，类型是 int &
        i *= i;

    for(auto i : v)
        cout << i << " ";
    cout << endl;
    


    const vector<int> v2{1,2,3};
    //v2.push_back(4);
    cout << "size=" << v2.size() << endl;
    //v2[0] = 9;
    for(auto i : v2)
        cout << i << " ";
    cout << endl;


    //const vector<int> v3 {1,2};


    vector<unsigned> scores(11,0);      //直接初始化，vector对象中有11个元素，每个元素的值为0
    unsigned grade;
    while(cin >> grade){
        if(grade <= 100)
            ++scores[grade/10];
    }

    for(auto s : scores)
        cout << s << " ";
    cout << endl;



    vector<int> ivec;               //一个空vector
    for(decltype(ivec.size()) ix=0; ix != 10; ix++)
        ivec.push_back(ix);

    for(auto i : ivec){
        cout << i << " ";
    }
    cout << endl;


    //使用size_type类型，必须支持它是由那种类型定义的。
    //vector对象定义的类型必须包含对象中元素的类型，如 vector<int>, vector<string>
    //
    vector<int>::size_type len;
    vector<string>::size_type len2;


    vector<int> v3;
    vector<string> v4;


    //使用关键字 decltype 类型说明符，让编译器根据表达式的值推断变量的类型
    //vector成员函数 size() 返回值的类型是相应类型的 size_type 类型。
    decltype(v3.size()) len3;
    decltype(v4.size()) len4;

    

    return 0;   
}